// src/router/index.js路由模块

// 1. 导入Vue和VueRouter的包
import Vue from 'vue'
import VueRouter from 'vue-router'

import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'
import Tab1 from '@/components/tabs/Tab1.vue'
import Tab2 from '@/components/tabs/Tab2.vue'
import Login from '@/components/Login.vue'
import Main from '@/components/Main.vue'

// 2. 调用Vue.use()函数，把VueRouter安装为Vue的插件
Vue.use(VueRouter)

// 3. 创建路由的实例对象
const router = new VueRouter({
  // routes是一个数组  定义组件和hash地址之间 的关系
  routes: [
    // 路由规则
    { path: '/', redirect: '/home' },
    { path: '/home', component: Home },
    // 需求： 在movie组件中希望根据id的值来展示对应电影的详情信息。
    // props: true 开启props传参  路由规则的动态传参
    { path: '/movie/:id', component: Movie, props: true },
    {
      path: '/about',
      component: About,
      // redirect: '/about/tab1',
      children: [
        // 默认子路由，在path为空的情况下，这条路由的规则叫做默认子路由。
        { path: '', component: Tab1 },
        // { path:'tab1', component: Tab1 },
        { path: 'tab2', component: Tab2 },
      ]
    },
    { path: '/login', component: Login },
    { path: '/main', component: Main }

  ]
})

// 导航守卫 
// 为router实例对象，声明全局前置导航守卫
// 只要发生路由的跳转必然会发生befaoreEach指定的回调函数 
router.beforeEach((to, from, next) => {
  // to 是将要访问的路由的信息对象
  // from 是将要离开的路由的信息对象
  // next 是一个函数，调用next()表示放行， 允许这次路由导航

  // 1. 拿到用户将要访问的hash地址
  // 2. 判断hash地址是否等于 /main。如果等于证明需要登录后才能访问成功，不等于就不需要登录直接放行
  // 3. 如果访问的地址是/main则需要读取localStorage中的token的值。 如果有token放行，没有token就强制跳转到/login
  if (to.path === '/main') {
    const token = localStorage.getItem('token')
    if (token) {
      next()
    }
    else {
      next('/login')
    }
  }
  else {
    next()
  }

})

// 4. 向外共享路由的实例对象
export default router